﻿using System;
using System.Collections;
using System.IO;

namespace Comun
{
	/// <summary>
	/// Administración y manipulación de errores
	/// </summary>
	public class Errores
	{
		private TipoDeError Error;
		private ArrayList CollErrores;
		
		/// <summary>Contructor de la clase</summary>
		public Errores()
		{
			Error = new TipoDeError();
  			CollErrores = new ArrayList();
		}

		/// <summary>Agrega error a la pila
		/// <param name='nCodigo'>Codigo de Error.</param>
		/// <param name='sDescripcion'>Descripcion del Error.</param>		
		/// <param name='sFuncion'>Metodo/Funcion donde se produjo la Exepcion.</param>
		/// <param name='nSeveridad'>Grado de severidad del Error.</param>
		/// </summary>		
		public int Agregar(double nCodigo, string sDescripcion, string sFuncion, short nSeveridad)
		{

            TipoDeError E = new TipoDeError();
			E.nCodigo = nCodigo;
			E.sDescripcion = sDescripcion;
			E.sFuncion = sFuncion;
			E.nSeveridad = nSeveridad;
			/* obtiene la fecha/hora actual */
			DateTime Date = DateTime.Now;
			E.sFecha = Date.ToShortDateString();
			E.sHora = Date.ToShortTimeString();

			return CollErrores.Add(E);
		}

        /// <summary>Agrega error a la pila
        /// <param name='nCodigo'>Codigo de Error.</param>
        /// <param name='sDescripcion'>Descripcion del Error.</param>		
        /// <param name='sFuncion'>Metodo/Funcion donde se produjo la Exepcion.</param>
        /// <param name='nSeveridad'>Grado de severidad del Error.</param>
        /// </summary>		
        public int Agregar(double nCodigo,int nCodigoErrorSql, string sDescripcion, string sFuncion, short nSeveridad)
        {

            TipoDeError E = new TipoDeError();
            E.nCodigo = nCodigo;
            E.nCodigoErrorSql = nCodigoErrorSql;
            E.sDescripcion = sDescripcion;
            E.sFuncion = sFuncion;
            E.nSeveridad = nSeveridad;
            /* obtiene la fecha/hora actual */
            DateTime Date = DateTime.Now;
            E.sFecha = Date.ToShortDateString();
            E.sHora = Date.ToShortTimeString();

            return CollErrores.Add(E);
        }
		/// <summary>Agrega un conjunto de errores a la pila
		/// <param name='e'></param>
		/// </summary>
		public int Agregar(Errores e)
		{
            TipoDeError t;
			if(e.Cantidad()==0)
				return 0;

			for(int i=0; i< e.Cantidad(); i++)
			{
				t = e.Item(i);
				this.Agregar(t.nCodigo,t.sDescripcion,t.sFuncion,t.nSeveridad);
			}
			return 1;
		}

		/// <summary>Quita todos los elementos de una pila de errores</summary>
		public int Resetear()
		{
			if(CollErrores.Count == 0)
				return 0;
			else
				CollErrores.Clear();
	
			return 1;
		}

		/// <summary>Devuelve la cantidad de errores</summary>
		public int Cantidad()
		{
			return CollErrores.Count;
		}

		/// <summary>Obtiene el error sub indice</summary>
		public TipoDeError Item(int Indice)
		{
			if(Indice >= 0 && Indice < Cantidad())
                return (TipoDeError)CollErrores[Indice];
			else
				return null;
		}

		
	}
}